<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
    // 1- pending fulfilled rejected
	// 1、如何改变promise的状态?
	// (1) resolve(value): 如果当前是pending就会变为fulfilled
	// (2) reject(reason): 如果当前是pending就会变为rejected
	// (3) 抛出异常: 如果当前是pending就会变为rejected
	{
		// const p = new Promise((resolve,reject)=>{
        //     // resolve(100);// 如果当前是pending就会变为fulfilled
		// 	// reject(200);// 如果当前是pending就会变为rejected
        //     throw "异常";
        // });
		// console.log(p)
    }

	// 2、一个promise指定多个成功/失败回调函数, 都会调用吗?
    // 当promise改变为对应状态时都会调用
	{
		// const p = new Promise((resolve,reject)=>{
		// 	reject(100);
        // })
        // p.then(value=>{
		// 	console.log("成功回调1",value);
        // },reason=>{
		// 	console.log("失败回调1",reason);
        // })
		// p.then(value=>{
		// 	console.log("成功回调2",value);
		// },reason=>{
		// 	console.log("失败回调2",reason);
		// })
		// p.then(value=>{
		// 	console.log("成功回调3",value);
		// },reason=>{
		// 	console.log("失败回调3",reason);
		// })
		// p.then(value=>{
		// 	console.log("成功回调4",value);
		// },reason=>{
		// 	console.log("失败回调4",reason);
		// })
    }
	// 3、改变promise状态和指定回调函数谁先谁后?
	// (1) 都有可能, 正常情况下是先指定回调再改变状态, 但也可以先改状态再指定回调
	{
		// 正常情况下：执行器回调函数中存在异步行为
        // const p = new Promise((resolve)=>{
		// 	setTimeout(()=>{
		// 		resolve(100);
        //     })
        // });
		// p.then(value=>{
		// 	console.log(value);
        // })
    }
	// (2) 如何先改状态再指定回调?
	// 	① 在执行器中直接调用resolve()/reject()
	{
		// const p = new Promise(resolve=>{
		// 	resolve(100);
        // })
        // p.then(value=>{
		//
        // })
    }
	// 	② 延迟更长时间才调用then()
	{
		// const p = new Promise(resolve=>{
		// 	setTimeout(()=>{
		// 		resolve(200)
        //     })
        // });
		// setTimeout(()=>{
		// 	p.then(value=>{
        //
		// 	})
        // },1)
    }
	// (3) 什么时候才能得到数据?
	// 	① 如果先指定的回调, 那当状态发生改变时, 回调函数就会调用, 得到数据
	{
		// const p = new Promise((resolve)=>{
		// 	setTimeout(()=>{
		// 		console.log("2-executor->setTimeout")
		// 		resolve(200)
        //     })
        // })
        // p.then(value=>{
		// 	console.log("3-成功回调",value);
        // })
		// console.log("1-over");
    }
	// 	② 如果先改变的状态, 那当指定回调时, 回调函数就会调用(异步调用), 得到数据
	// const p = new Promise((resolve)=>{
	// 	console.log("1-executor->setTimeout")
	// 	resolve(200)
	// })
	// p.then(value=>{
	// 	console.log("3-成功回调",value);
	// })
	// console.log("2-over");
</script>
</html>